package com.myblog.exception;

import com.myblog.entity.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.mail.MailException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 功能: 全局异常捕获器
 * 作者: 沙琪马
 * 日期: 2024/5/21 18:28
 */

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 捕获邮件发送异常
     * @param ex
     * @return
     */
    @ExceptionHandler(MailException.class)
    public String handleMailException(MailException ex) {
        log.info("邮件发送失败：" + ex.getMessage());
        return "邮件发送失败：" + ex.getMessage();
    }

    /**
     * 默认全局异常处理。
     * @param e the e
     * @return ResultData
     */
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public Result<String> exception(Exception e) {
        System.out.println("----come in GlobalExceptionHandler");
        log.error("全局异常信息exception:{}", e.getMessage(), e);
        return Result.error("500",e.getMessage());
    }

    /**
     * 捕获自定义异常
     * @param e
     * @return
     */
    @ExceptionHandler(com.myblog.exception.ServiceException.class) // 捕获异常
    @ResponseBody // 把java对象转为JSON, 这个必须加上
    public Result serviceException(com.myblog.exception.ServiceException e) {
        return Result.error(e.getCode(), e.getMessage());
    }

}
